package com.demo.java.OD301_350.OD350;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【荒岛求生(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146163509
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] numsString = input.split(" "); // 按空格分隔输入

        int[] nums = new int[numsString.length];
        for (int i = 0; i < numsString.length; i++) {
            nums[i] = Integer.parseInt(numsString[i]); // 转化为整型数组
        }

        Stack<Integer> left = new Stack<>();  // 用于存储从左边进入的学生
        Stack<Integer> right = new Stack<>(); // 用于存储从右边进入的学生

        // 将正数放入right栈，负数取绝对值后放入left栈
        for (int num : nums) {
            if (num > 0) {
                right.push(num); // 右侧学生进入右栈
            } else {
                left.push(Math.abs(num)); // 左侧学生进入左栈，取绝对值
            }

            // 当left和right栈均不为空时，执行以下逻辑
            while (!left.isEmpty() && !right.isEmpty()) {
                // 如果left栈顶元素大于right栈顶元素
                if (left.peek() > right.peek()) {
                    // 将left栈顶元素减去right栈顶元素，并将结果重新放入left栈
                    left.push(left.pop() - right.pop());
                }
                // 如果right栈顶元素大于left栈顶元素
                else if (left.peek() < right.peek()) {
                    // 将right栈顶元素减去left栈顶元素，并将结果重新放入right栈
                    right.push(right.pop() - left.pop());
                }
                // 如果left栈顶元素等于right栈顶元素，表示两个元素相等，都可以弹出
                else {
                    left.pop();
                    right.pop();
                }
            }
        }

        // 输出left栈和right栈中剩余元素的数量之和
        System.out.println(left.size() + right.size()); // 输出存活学生数量
    }
}